﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Security.Cryptography;

namespace VentaElectrodomesticos.Utilities
{
    public static class Utils
    {
        public static void ClearTextBoxes(Control control)
        {
            foreach (Control c in control.Controls)
            {
                if (c is TextBox)
                {
                    ((TextBox)c).Clear();
                }

                if (c.HasChildren)
                {
                    ClearTextBoxes(c);
                }
            }
        }

        public static bool campoVacio(TextBox campo, ErrorProvider errorProvider, String errorMsg)
        {
            bool vacio = false;

            if (campo.Text == "")
            {
                errorProvider.SetError(campo, errorMsg);
                vacio = true;
            }
            else
            {
                errorProvider.SetError(campo, "");
            }

            return vacio;
        }

        public static bool campoVacio(ComboBox campo, ErrorProvider errorProvider, String errorMsg)
        {
            bool vacio = false;

            if (campo.SelectedIndex == -1)
            {
                errorProvider.SetError(campo, errorMsg);
                vacio = true;
            }
            else
            {
                errorProvider.SetError(campo, "");
            }

            return vacio;
        }

        public static bool campoVacio(DataGridView dgv, ErrorProvider errorProvider, String errorMsg)
        {
            bool vacio = false;
            if (dgv.RowCount <= 0)
            {
                vacio = true;
                errorProvider.SetError(dgv, errorMsg);
            }
            else
            {
                errorProvider.SetError(dgv, "");
            }
            return vacio;
        }

        public static String agregarCondicionExacta(String condiciones, String campo, String valor, bool esNumerico)
        {
            String condicion = "";
            if (!(("").Equals(valor)))
            {
                if (esNumerico)
                {
                    if (("").Equals(condiciones))
                    {
                        condicion = " WHERE " + campo + " = " + valor;
                    }
                    else
                    {
                        condicion = " AND " + campo + " = " + valor;
                    }
                }
                else
                {
                    if (("").Equals(condiciones))
                    {
                        condicion = " WHERE " + campo + " = '" + valor + "'";
                    }
                    else
                    {
                        condicion = " AND " + campo + " = '" + valor + "'";
                    }
                }
            }
            return condicion;
        }

        public static String agregarCondicion(String condiciones, String campo, String valor)
        {
            String condicion = "";
            if (!(("").Equals(valor)))
            {
                if (("").Equals(condiciones))
                {
                    condicion = " WHERE " + campo + " LIKE '%" + valor + "%'";
                }
                else
                {
                    condicion = " AND " + campo + " LIKE '%" + valor + "%'";
                }
            }
            return condicion;
        }

        public static String agregarCondicion(String condiciones, String campo, String valor, String strPreValor, String strPostValor)
        {
            String condicion = "";
            if (!(("").Equals(valor)))
            {
                if (("").Equals(condiciones))
                {
                    condicion = " WHERE " + campo + strPreValor + valor + strPostValor;
                }
                else
                {
                    condicion = " AND " + campo + strPreValor + valor + strPostValor;
                }
            }
            return condicion;
        }

        public static String agregarCondicionBetween(String condiciones, String campo, String valor1, String valor2)
        {
            String condicion = "";
            if (!("").Equals(valor1) && !("").Equals(valor2))
            {
                if (("").Equals(condiciones))
                {
                    condicion = " WHERE " + campo + " BETWEEN " + valor1 + " AND " + valor2;
                }
                else
                {
                    condicion = " AND " + campo + " BETWEEN " + valor1 + " AND " + valor2;
                }
            }
            return condicion;
        }


        public static String agregarCondicionConKeyValue(String condiciones, String campo, object objetoKeyValue)
        {
            String ret = "";
            if (objetoKeyValue != null)
            {
                KeyValuePair keyValuePair = (KeyValuePair)objetoKeyValue;
                ret += Utils.agregarCondicionExacta(condiciones, campo, keyValuePair.Key.ToString(), true);
            }
            return ret;
        }
        

        public static String dgvToString(DataGridView dgv, params string[] columnsToInclude)
        {
            String ret = "";

            foreach (DataGridViewRow row in dgv.Rows)
            {
                ret += "¦";

                for (int i = 0; i < row.Cells.Count; i++)
                {
                    if (columnsToInclude.Contains<string>(row.Cells[i].OwningColumn.Name))
                    {
                        if (i != 0)
                            ret += ",";
                        ret += row.Cells[i].Value.ToString();

                    }
                }
            }

            //MessageBox.Show(ret);
            return ret;
        }

        public static string encriptarPassword(string input)
        {
            // Create a new instance of the MD5CryptoServiceProvider object.
            SHA256 sha256Hasher = SHA256.Create();

            // Convert the input string to a byte array and compute the hash.
            byte[] data = sha256Hasher.ComputeHash(Encoding.Default.GetBytes(input));

            // Create a new Stringbuilder to collect the bytes
            // and create a string.
            StringBuilder sBuilder = new StringBuilder();

            // Loop through each byte of the hashed data 
            // and format each one as a hexadecimal string.
            for (int i = 0; i < data.Length; i++)
            {
                sBuilder.Append(data[i].ToString("x2"));
            }

            //MessageBox.Show(sBuilder.ToString());
            // Return the hexadecimal string.
            return sBuilder.ToString();
        }

        public static bool validarAnio(TextBox tbAnio, ErrorProvider errorProvider)
        {
            bool valido = true;
            int anio;
            int.TryParse(tbAnio.Text, out anio);

            if (tbAnio.Text.Trim().Length == 0)
            {
                valido = false;
                errorProvider.SetError(tbAnio, "Ingrese un año");
            }
            else if (anio < 1995 || anio > 2100)
            {
                valido = false;
                errorProvider.SetError(tbAnio, "Ingrese un año entre 1995 y 2100");
            }
            else
            {
                errorProvider.SetError(tbAnio, "");
            }

            return valido;
        }

    }
}
